一、概述
此模組提供了一系列用於 JavaScript 型別判斷和資料處理的工具函式。它的核心功能是準確地獲取任何 JavaScript 物件的具體型別,並基於此提供大量的型別檢查函式(例如 是陣列, 是數字, 是null或空字串 等)。
此外,該模組還包含了一些實用的工具,如深拷貝物件、移除 Proxy、處理浮點數精度問題,以及從函式中提取元數據(如方法和參數名稱)等。這些工具旨在簡化開發過程中的常見任務,並提高程式碼的健壯性和可讀性。
二、屬性
此模組導出以下常數屬性,用於表示 JavaScript 的基本數據類型名稱。
| 屬性 | 描述 |
|---|---|
ARRAY |
表示陣列 (Array) 類型的名稱。 |
BOOLEAN |
表示布林值 (Boolean) 類型的名稱。 |
DATE |
表示日期 (Date) 類型的名稱。 |
FUNCTION |
表示函式 (Function) 類型的名稱。 |
NULL |
表示空值 (Null) 類型的名稱。 |
NUMBER |
表示數字 (Number) 類型的名稱。 |
OBJECT |
表示物件 (Object) 類型的名稱。 |
REGEXP |
表示正則表達式 (RegExp) 類型的名稱。 |
STRING |
表示字串 (String) 類型的名稱。 |
UNDEFINED |
表示未定義 (Undefined) 類型的名稱。 |
匯出到試算表
三、方法
取得類型
取得指定物件的類型名稱。
取得類型(obj)
參數:
obj(*): 要檢測的物件。
返回:
string: 物件的類型名稱,如 “Array”, “String”, “Number” 等。
範例:
取得類型([]); // "Array"
取得類型(123); // "Number"
是陣列
判斷是否為陣列類型。
是陣列(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果參數是陣列類型則返回true,否則返回false。
範例:
是陣列([]); // true
是陣列({}); // false
是布林值
判斷指定物件是否為布林值類型。
是布林值(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是布林值類型,則返回true;否則返回false。
範例:
是布林值(true); // true
是布林值(false); // true
是布林值(0); // false
是日期
判斷是否為合法的日期類型。
是日期(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果參數是合法的日期類型則返回true,否則返回false。
範例:
是日期(new Date()); // true
是日期("2023-01-01"); // false
是空字串
判斷物件是否為空字串。
是空字串(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是空字串,則返回true;否則返回false。
範例:
是空字串(""); // true
是空字串("Hello"); // false
是函式
判斷物件是否為函式類型。
是函式(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是函式類型,則返回true;否則返回false。
範例:
是函式(() => {}); // true
是函式(function test() {}); // true
是null
判斷物件是否為 null。
是null(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是null,則返回true;否則返回false。
範例:
是null(null); // true
是null(123); // false
是null或未定義
判斷物件是否為 null 或 undefined。
是null或未定義(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是null或undefined,則返回true;否則返回false。
範例:
是null或未定義(null); // true
是null或未定義(undefined); // true
是null或未定義(""); // false
是null或空字串
判斷物件是否為 null、undefined 或空字串。
是null或空字串(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是null、undefined或空字串,則返回true;否則返回false。
範例:
是null或空字串(null); // true
是null或空字串(undefined); // true
是null或空字串(""); // true
是null或空字串("text"); // false
是數字
判斷物件是否為數字類型。
是數字(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是數字類型,則返回true;否則返回false。
範例:
是數字(123); // true
是數字("123"); // false
是物件
判斷物件是否為物件(非陣列)類型。
是物件(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是對象類型,則返回true;否則返回false。
範例:
是物件({}); // true
是物件([]); // false
是正則表達式
判斷物件是否為正則表達式類型。
是正則表達式(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是正則表達式,則返回true;否則返回false。
範例:
是正則表達式(/abc/); // true
是正則表達式("abc"); // false
是字串
判斷物件是否為字串類型。
是字串(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是字串類型,則返回true;否則返回false。
範例:
是字串("Hello"); // true
是字串(123); // false
是UUID
判斷是否為有效的 UUID 格式字串。
是UUID(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果是合法的 UUID,則返回true,否則返回false。
範例:
是UUID("123e4567-e89b-12d3-a456-426655440000"); // true
是UUID("invalid-uuid"); // false
是未定義
判斷物件是否為 undefined。
是未定義(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是undefined,則返回true;否則返回false。
範例:
是未定義(undefined); // true
是未定義(null); // false
是很小的值
判斷數值是否為很小的值(小於容差範圍 TOLERANCE)。
是很小的值(x)
參數:
x(number): 要檢查的數值。
返回:
boolean: 如果數值的絕對值小於TOLERANCE,返回true;否則返回false。
範例:
// 假設 TOLERANCE = 1.0E-8
是很小的值(1.0E-9); // true
是很小的值(0.01); // false
不是陣列
判斷物件是否不是陣列類型。
不是陣列(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是陣列類型,則返回true;否則返回false。
範例:
不是陣列({}); // true
不是陣列([]); // false
不是布林值
判斷物件是否不是布林值類型。
不是布林值(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是布林值類型,則返回true;否則返回false。
範例:
不是布林值(0); // true
不是布林值(true); // false
不是日期
判斷物件是否不是日期類型。
不是日期(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是日期類型,則返回true;否則返回false。
範例:
不是日期("2023-01-01"); // true
不是日期(new Date()); // false
不是空字串
判斷物件是否為非空字串。
不是空字串(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件是非空字串,則返回true;否則返回false。
範例:
不是空字串("Hello"); // true
不是空字串(""); // false
不是函式
判斷物件是否不是函式類型。
不是函式(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是函式類型,則返回true;否則返回false。
範例:
不是函式(123); // true
不是函式(() => {}); // false
不是null
判斷物件是否不是 null。
不是null(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是null,則返回true;否則返回false。
範例:
不是null(123); // true
不是null(null); // false
不是數字
判斷物件是否不是數字類型。
不是數字(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是數字類型,則返回true;否則返回false。
範例:
不是數字("123"); // true
不是數字(123); // false
不是物件
判斷物件是否不是物件類型。
不是物件(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是物件類型,則返回true;否則返回false。
範例:
不是物件([]); // true
不是物件({}); // false
不是正則表達式
判斷物件是否不是正則表達式類型。
不是正則表達式(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是正則表達式,則返回true;否則返回false。
範例:
不是正則表達式("abc"); // true
不是正則表達式(/abc/); // false
不是字串
判斷物件是否不是字串類型。
不是字串(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是字串類型,則返回true;否則返回false。
範例:
不是字串(123); // true
不是字串("Hello"); // false
不是未定義
判斷物件是否不是 undefined。
不是未定義(obj)
參數:
obj(*): 要檢測的物件。
返回:
boolean: 如果物件不是undefined,則返回true;否則返回false。
範例:
不是未定義(null); // true
不是未定義(undefined); // false
相同類型
比較兩個值是否為相同的資料型別。
相同類型(obj1, obj2)
參數:
obj1(*): 第一個值,用於比較的參數。obj2(*): 第二個值,用於比較的參數。
返回:
boolean: 若兩個值的型別相同則返回true;若型別不同或無效輸入則返回false。
範例:
相同類型(123, 456); // true
相同類型([], {}); // false
相同類型(null, null); // true
相同類型(undefined, null); // false
複製物件
深拷貝一個物件。
複製物件(object)
參數:
object(Object): 要拷貝的物件。
返回:
Object: 返回物件的深拷貝。
範例:
const obj = { a: 1, b: { c: 2 } };
const copy = 複製物件(obj);
console.log(copy); // { a: 1, b: { c: 2 } }
取得方法
獲取物件及其原型鏈中所有非構造函式的函式名稱列表。
取得方法(obj)
參數:
obj(Object): 傳入的物件。
返回:
string[]: 包含所有函式名稱的陣列 (不重複)。
拋出:
TypeError: 如果參數不是一個物件。
取得參數名稱
提取函式的參數名稱列表。
取得參數名稱(func)
參數:
func(Function): 要提取參數名稱的函式。
返回:
string[]: 包含參數名稱的陣列;若輸入無效或無參數則返回空陣列。
拋出:
TypeError: 如果參數不是一個函式。
移除代理
深拷貝物件以移除 Proxy 並返回新的物件。
移除代理(obj)
參數:
obj(*): 需要移除 Proxy 的物件。
返回:
*: 返回新的深拷貝物件;null和undefined將直接返回。
拋出:
Error: 當無法序列化物件時(例如循環引用)。
修正精確度誤差
修正精確度誤差,移除小數點後多餘的零並精確到指定的小數位數。
修正精確度誤差(x, [精確度=10])
參數:
x(number): 要修正的數值。精確度(number, optional): 指定修正的小數位數範圍,預設為 10。
返回:
number: 返回修正後的數值。
範例:
修正精確度誤差(1.2300000000); // 1.23
修正精確度誤差(0.0000001, 7); // 0.0000001
修正精確度誤差(1.01111111, 4); // 1.0111
兩個數值相等
驗證兩個數值是否相等(在允許的誤差範圍內)。
兩個數值相等(a, b)
參數:
a(number): 第一個數值。b(number): 第二個數值。
返回:
boolean: 如果兩個數值在允許的容差範圍內相等,返回true;否則返回false。
範例:
// 假設 TOLERANCE = 1.0E-8
兩個數值相等(0.1 + 0.2, 0.3); // true
兩個數值相等(0.1, 0.2); // false
必須是函式
驗證輸入是否為函式。如果輸入存在且不是函式,則拋出 TypeError。
必須是函式(函式)
參數:
函式(Function): 要驗證的目標值。
拋出:
TypeError: 如果輸入存在但不是函式時,拋出型別錯誤。
範例:
必須是函式(() => console.log('這是一個函式')); // 不會拋出錯誤
必須是函式(123); // 拋出型別錯誤
必須是函式(); // 不會拋出錯誤